package com.lfy.modules.blog.service;

import com.lfy.modules.blog.domain.ArticleEntity;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lfy.modules.blog.domain.dto.article.ArticleDTO;
import com.lfy.modules.blog.domain.dto.article.CommentDTO;
import com.lfy.modules.blog.domain.dto.article.ModifyArticleDTO;
import com.lfy.modules.blog.domain.vo.article.ArticleTitleAndIdVO;
import com.lfy.modules.blog.domain.vo.article.ArticleVO;
import com.lfy.modules.blog.domain.vo.article.ClassificationListVO;
import com.lfy.modules.common.domain.PageResultVO;
import com.lfy.modules.common.domain.R;
import com.lfy.modules.common.domain.entity.UserEntity;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
* @author 吕飞扬
* @description 针对表【blog_article】的数据库操作Service
* @createDate 2024-05-02 16:28:58
*/
public interface ArticleService extends IService<ArticleEntity> {

    /**
     * 保存文章
     * @param addArticleDTO dto
     * @return R
     */
    R<Void> saveArticle(ArticleDTO addArticleDTO, UserEntity user);

    /**
     * 文章内图片上传
     * @param user 用户
     * @param files 图片文件
     * @return R
     */
    R<List<String>> uploadImg(UserEntity user, MultipartFile[] files);

    /**
     * 获取文章列表
     */
    R<PageResultVO<ArticleVO>> getArticleList(Integer pageNum, Integer pageSize);

    /**
     * 更改文章推荐状态
     * @param articleId 文章id
     * @param recommend 推荐状态
     * @return R
     */
    R<Void> modifyRecommend(Long articleId, Integer recommend);

    /**
     * 文章上架
     * @param articleId 文章id
     * @return R
     */
    R<Void> upArticle(Long articleId);

    /**
     * 文章下架
     * @param articleId 文章id
     * @return
     */
    R<Void> downArticle(Long articleId);

    /**
     * 删除文章
     * @return R
     */
    R<Void> deleteArticle(Long articleId);

    /**
     * 更新文章
     * @param dto dto
     * @param user 用户
     * @return R
     */
    R<Void> modifyArticle(ModifyArticleDTO dto, UserEntity user);

    /**
     * 修改文章封面
     * @param articleId 文章id
     * @param file 图片文件
     * @return R
     */
    R<Void> modifyCover(Long articleId, MultipartFile file);

    /**
     * 获取所有文章标题和id
     * @return R
     */
    R<List<ArticleTitleAndIdVO>> getAllArticleTitleAndId();

    /**
     * 回复评论
     * @param dto dto
     * @return R
     */
    R<Void> comment(CommentDTO dto);

    /**
     * 删除评论回复
     * @param id 评论回复id
     * @return R
     */
    R<Void> deleteComment(Long id,Long articleId);

}
